#include "manualdialog.h"

ManualDialog::ManualDialog(QWidget *parent): QDialog(parent)
{
    this->setFixedSize(790, 770);
    this->setWindowTitle("Cute C++ Manual");
    QVBoxLayout *mainFormLayout = new QVBoxLayout; //定义垂直布局器
    this->setLayout(mainFormLayout);//将mainFormLayout设定为本窗口的布局器

    manualTextEdit = new QTextEdit;
    okButton = new QPushButton("OK"); //定义OK按钮

    mainFormLayout->setContentsMargins(10, 10, 10, 10);
    mainFormLayout->setSpacing(10);

    QHBoxLayout *hLayout = new QHBoxLayout;
    hLayout->addStretch();
    hLayout->addWidget(okButton);
    hLayout->addStretch();

    QString manualString = "\tCute C++基于C++和Qt类库开发，是专为C/C++程序员开发的一款简易集成开发环境，自带MinGW64 v13.10编译器（默认对应C17和C++17标准，编译选项添加"
                            "-std=c++20可对应C++20标准）。设计和使用方法参考了Dev C++ (2016年起已停止更新)，本着极简主义原则，精简了不必要的功能，"
                            "使程序运行更流畅。本软件可读取各种格式文本文件，避免中文乱码。修正了Dev C++中的一些Bug，改进了界面设计，提高了用户体验。"
                            "\n\t本软件为单文件编译进行了优化，无需创建工程项目，编译快速方便，适合C/C++初学者练习编程使用，"
                            "也可用于算法研发等规模不大的程序开发。所有代码均自行书写，让初学者掌握程序的方方面面，为以后使用大型开发工具打下基础。"
                            "使用方法较为简单，在文本区输入代码，保存为c或cpp文件，然后点击工具栏的\" 编译&运行\" 按钮或按Ctrl+R键，即可在下方的\"编译记录\""
                            "和\"信息列表\"区查看编译结果，无错误情况下直接运行。在 \"工具\" 菜单中选择 \"编译器配置\"，可以选择编译模式，警告信息等选项。"
                            "\n\t本软件也完善了项目管理功能，支持常规的C/C++多文件开发，项目文件后缀名为project。项目可编译为可执行文件，也可构建动态库或静态库供其它程序调用。"
                            "项目中可添加RC资源文件，用于显示程序的桌面图标或版本信息等。可将系统头文件和第三方库头文件放入一个预编译头文件，用于提高编译效率。"
                            "若发生项目有改动，但编译不能反映的情况，可以执行\"项目\"菜单中的清除临时文件功能，则再次构建时所有文件将重新编译。在项目管理栏，右键点击项目名，"
                            "在弹出的菜单中可对项目进行添加文件等操作。右键点击文件名，可对文件进行重命名，设置&取消预编译和移除等操作。"
                            "\n\t在\"编辑\"菜单中“复制”功能只复制纯文本，用于纯文本编辑器之间的文本粘贴，如果执行 \"复制为HTML\" 功能，"
                            "则可以将携带字体和颜色等信息的富文本复制粘贴到Word或PowerPoint等可以接收富文本的软件中。"
                            "\n\t在编辑器选项中，可选择界面显示语言为中文或英文，可改变工具栏图标尺寸。代码可选择保存为System"
                            "当地格式，也可选择保存为UTF8格式，以满足不同程序的要求。"
                            "\n\t在\"视图\"菜单中，可改变代码字体大小（按Ctrl键同时转动鼠标滚轮可实现同样效果），可选择工具栏停靠位置。"
                            "本软件有典雅白，高级灰和酷炫黑三个对比度主题，但不会随系统的对比度主题变化，需要在视图菜单颜色主题中进行手动切换。"
                            "点击语法高亮定制，弹出颜色定制对话框，可为不同代码选择自己喜欢的颜色，点击对话框的Default按钮恢复默认颜色。"
                            "\n\t在AStyle菜单中，有格式化代码功能，使代码排列符合一定规范，易于阅读和修改。在格式化选项中可以"
                            "对代码格式进行各种定制，目前大括号的样式以Allman格式最为流行。"
                            "\n\t可执行安装文件和项目源代码可从（https://gitee.com/codylu/cute-cpp）下载。"
                            "\n\t如果有错误报告或者改进建议，请发邮件反馈：jlu1027@hotmail.com";

    manualTextEdit->setReadOnly(true);
    //manualTextEdit->document()->setDefaultTextOption(QTextOption(Qt::AlignJustify));

    //设置Tab符宽度并设置
    QFontMetrics fm(this->font());
    double fontWidth = fm.horizontalAdvance("国");
    manualTextEdit->setTabStopDistance(fontWidth * 2);

    manualTextEdit->setPlainText(manualString);

    QTextBlockFormat blockFormat;
    blockFormat.setLineHeight(6, QTextBlockFormat::LineDistanceHeight);//设定行间距为几个像素
    QTextCursor textCursor = manualTextEdit->textCursor();
    //manualTextEdit->selectAll();//选中全部文本，否则只会修改当前行
    textCursor.select(QTextCursor::Document);//选中全部文本
    textCursor.setBlockFormat(blockFormat);
    textCursor.clearSelection();
    manualTextEdit->setTextCursor(textCursor);

    mainFormLayout->addWidget(manualTextEdit);
    mainFormLayout->addLayout(hLayout);

    QObject::connect(okButton, &QPushButton::clicked, this, &ManualDialog::okButtonClicked);//OK按钮点击和处理函数的连接
}

void ManualDialog::okButtonClicked()
{
    this->accept();//OK按钮点击以后发出Accepted返回值
}
